package com.xbongbong.saas.enums;

import lombok.Getter;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * 模板字段在各个页面的展示情况枚举
 *
 * @author chaoxiong.lei
 * @date 2019/1/15 14:42
 */
@Getter
public enum ShowTypeEnum {
    /**
     * 字段在各个界面（新建、编辑、列表、详情）的展现形式
     * 0：全部都显示
     * 1：新建编辑显示
     * 2：列表显示
     * 3：详情显示
     * 4：新建编辑、列表显示
     * 5：新建编辑、详情显示
     * 6：列表、详情显示
     * 7: 都不显示
     * 8: 仅新建不展示
     * 9: 导出可见导入不可见
     * ...
     */
    ALL(0),
    EDIT(1),
    LIST(2),
    DETAIL(3),
    EDIT_LIST(4),
    EDIT_DETAIL(5),
    LIST_DETAIL(6),
    NONE(7),
    EXCLUDE_NEW(8),
    EXPORT_NO_IMPORT(9),
    ;

    private int code;

    ShowTypeEnum(int code) {
        this.code = code;
    }

    public static boolean listShow(Integer showType) {
        if (Objects.equals(showType, null)){
            //也只有自定义的可能会null
            return true;
        }
        return Objects.equals(showType,ALL.code) || Objects.equals(showType,LIST.code) || Objects.equals(showType,EDIT_LIST.code) || Objects.equals(showType,LIST_DETAIL.code) || Objects.equals(showType,EXCLUDE_NEW.code);
    }

    public static boolean detailShow(Integer showType) {
        if (Objects.equals(showType,null)) {
            //也只有自定义的可能会null
            return true;
        }
        return Objects.equals(showType,ALL.code) || Objects.equals(showType,DETAIL.code) || Objects.equals(showType,EDIT_DETAIL.code) || Objects.equals(showType,LIST_DETAIL.code) || Objects.equals(showType,EXCLUDE_NEW.code);
    }

    public static boolean editShow(Integer showType) {
        if (Objects.equals(showType,null)) {
            //也只有自定义的可能会null
            return true;
        }
        return Objects.equals(showType,ALL.code) || Objects.equals(showType,EDIT.code) || Objects.equals(showType,EDIT_DETAIL.code) || Objects.equals(showType,EDIT_LIST.code);
    }

    /**
     * 获取新建时显示的类型
     *
     * @author GuoJun.HU
     * @since V1.0
     * @return List
     * @date 2019/4/24 16:36
     */
    public static List<Integer> getAddShowType() {
        return Arrays.asList(ALL.code, EDIT.code, EDIT_LIST.code, EDIT_DETAIL.code);
    }

    /**
     * 判断showType是否可见（隐藏字段不判断是否更改）
     * @param showType
     * @return boolean true 不可见，false 可见
     * @author zcp
     * @date 2019/7/4 19:45
     * @since v1.0
     * @version v1.0
     */
    public static boolean hideJump(Integer showType){
        if (Objects.equals(showType, NONE.code)) {
            return true;
        }
        return false;
    }
}
